#include <iostream>
#include <unistd.h>
#include <signal.h>
// #include <stdlib.h>
// #include <sys/wait.h>

// void handler(int signo)
// {
//     std::cout << "get a signo: " << signo << std::endl;

//     pid_t id = 0;
//     while ((id = waitpid(-1, nullptr, WNOHANG)) > 0)
//     {
//         std::cout << "回收进程：" << id << std::endl;
//     }
// }

int main()
{
    // Linux支持手动忽略SIGCHLD信号，所有的子进程都不需要父进程等待了，退出时自动回收z状态   
    signal(SIGCHLD, SIG_IGN);   
    for (int i =0; i < 10; i++)
    {
        pid_t id = fork();
        if (id == 0)
        {
            std::cout << "child is running..." << std::endl;
            sleep(5);
            exit(0);
        }
    }

    while(true) sleep(1);   // 父进程不退出
    return 0;
}